/*
 * Copyright (c) 2008-2021 浩瀚深度 All Rights Reserved.
 *
 * <p>FileName: H2DataSourceConfig.java</p>
 *
 * @author zz
 * @date 2024/2/4
 * @version 1.0
 * History:
 * v1.0.0 2024/2/4 Create
 */
package com.sqlweb.sqlweb.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.init.ScriptUtils;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.io.File;

/**
 * 初始化h2数据库
 * DataSource创建完后才初始化此类
 */
@Slf4j
@Service
@AutoConfigureAfter(DataSource.class)
public class H2DataSourceConfig {

    /**
     * 初始化sql
     */
    private static final String schema = "classpath:db/schema.sql";

    @Autowired
    DataSource dataSource;

    @Autowired
    ApplicationContextRegister applicationContextRegister;
    @Autowired
    private JdbcTemplate jdbcTemplate;


    @PostConstruct
    public void init() throws Exception {
        /*初始化本地数据库*/
        //获取系统用户目录
        String userHome = System.getProperty("user.home");
        // 创建一个标识文件,只有在第一次初始化数据库时会创建,如果系统用户目录下有这个文件,就不会重新执行sql脚本
        File f = new File(userHome + File.separator + "my.lock");
        if (!f.exists()) {
            log.info("--------------初始化H2数据----------------------");
            f.createNewFile();
            // 加载资源文件
            Resource resource = (Resource) applicationContextRegister.getResource(schema);
            // 手动执行SQL语句
            ScriptUtils.executeSqlScript(dataSource.getConnection(), resource);
        }else {
            log.info("已存在"+f.getName()+",不执行H2数据库初始化");
        }
    }
}
